argotを使ってコマンドラインツールを作ってみる
概要
Scalaのコマンドラインツール用parser
argot
http://software.clapper.org/argot/
を使って、コマンドラインアプリケーションを作ってみる。
GNUっぽいコマンドライン
-p
--param
とかの短縮系を作れたり、
下記のような表記を勝手に生成してくれる。
パラメータ、オプションについて、mustにしたりoptionalにしたりが簡単。
可変長なパラメータも取れる。
なによりScalaの型処理がいろいろ使えてまいうー。
Gradleの設定
このライブラリ自体が、同じ作者の別のライブラリに依存しているので、
解決しとく。
下記内容で、argot自体とargotが依存しているgrizzledっていうMathライブラリが解決できる。
compile (
[group: "org.clapper", name: "argot_2.9.2",version: "0.4"],
[group: "org.clapper", name: "grizzled-scala_2.9.0",version: "1.0.11.1"]
}
使用法想定
java -jar ツール.jar オプションとかパラメータ、みたいに使うのを想定する。
ライブラリ自体の簡単な利用方
1.argotをimportしとく
2.parserを定義
3.option引数とかを定義
4.parameter引数とかを定義
5.値を読む
1.argotをimportしとく
どうせ使うので、convertersもimport。
import org.clapper.argot._
import ArgotConverters._
2.parserを定義
importした上で、parserを定義する。
定義したaprserに文字列の配列を喰わせて使用する。
自分はそのまんまmain関数で使用するので、
def main(args : Array[String]) {
val parser = new ArgotParser("MondogrossoFileObserver", preUsage = Some("Mondogrosso fileObserver"))
//このへんにパラメータとかオプションとかの定義を足す
parser.parse(args)
}
みたいなかんじ。
3.option引数とかを定義
例えば、ファイルを引数に取るオプションはこんな感じに定義できる
val observe = parser.option[File](List("observe1"), "observe2", "Input files to read. If not specified, use stdin.") { (s, opt) =>
val file = new File(s)
if (!file.exists)
parser.usage("Input file \"" + s + "\" does not exist.")
file
}
4.parameter引数とかを定義
文字列を読むような引数の場合、
val req = parser.parameter[String]("foo", "some param", optional=false) {(s, opt) =>
s
}
optionalのtrue/falseで、必須かどうかが設定できる。
5.値を読む
当然だけど、parse後、読み込んだ値を使う事が出来る。
parser.parse(args)
println("find " + find.value)
肝心な使い方
一応書いておくと、
java- jar ファイル名.jar -オプション opt パラメータ
やってみた系(actorとかも使っててごちゃごちゃしてるけど)
https://github.com/sassembla/MondogrossoFileObserver